package pe.com.casadesign.service.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.com.casadesign.dao.NivelDAO;
import pe.com.casadesign.domain.Nivel;
import pe.com.casadesign.domain.OperacionResultado;
import pe.com.casadesign.domain.NivelProducto;
import pe.com.casadesign.domain.NivelTipo;
import pe.com.casadesign.domain.NivelMaterial;
import pe.com.casadesign.domain.NivelColor; 
import pe.com.casadesign.service.NivelService;
import pe.com.casadesign.service.util.Constantes;
import pe.com.casadesign.service.util.Funciones;

/**
 * Implementacion de NivelService.
 * 
 * @author Gustavo Susano
 * 
 */
@Service
public class NivelServiceImpl implements NivelService {
	private static final Logger logger = LoggerFactory.getLogger(ClienteServiceImpl.class);

    @Autowired
    private NivelDAO nivelDAO;
    
	@Override
	public Nivel listarNiveles() {
		return nivelDAO.listarNiveles();
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado registrarNivelProducto(NivelProducto nivelProducto) {
		boolean resultado = nivelDAO.registrarNivelProducto(nivelProducto);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelProducto.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado modificarNivelProducto(NivelProducto nivelProducto) {
		boolean resultado = nivelDAO.modificarNivelProducto(nivelProducto);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelProducto.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado registrarNivelTipo(NivelTipo nivelTipo) {
		boolean resultado = nivelDAO.registrarNivelTipo(nivelTipo);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelTipo.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado modificarNivelTipo(NivelTipo nivelTipo) {
		boolean resultado = nivelDAO.modificarNivelTipo(nivelTipo);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelTipo.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado registrarNivelMaterial(NivelMaterial nivelMaterial) {
		boolean resultado = nivelDAO.registrarNivelMaterial(nivelMaterial);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelMaterial.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado modificarNivelMaterial(NivelMaterial nivelMaterial) {
		boolean resultado = nivelDAO.modificarNivelMaterial(nivelMaterial);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelMaterial.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado registrarNivelColor(NivelColor nivelColor) {
		boolean resultado = nivelDAO.registrarNivelColor(nivelColor);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelColor.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	@Override
	@Transactional (propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
	public OperacionResultado modificarNivelColor(NivelColor nivelColor) {
		boolean resultado = nivelDAO.modificarNivelColor(nivelColor);
		
		OperacionResultado operacionResultado = new OperacionResultado();
		operacionResultado.setCodigoGenerado(String.valueOf(nivelColor.getCodigo()));
		operacionResultado.setEsOK(resultado?Constantes.SI:Constantes.NO);
		
		return operacionResultado;
	}
	
	
	}